/**
 * 最基础版本的深拷贝
 * 使用递归的思想
 * 考虑数组的情况
 * 但是循环引用会导致内存溢出
 * */ 
function clone (target) {
  if (typeof target === 'object') {
    let cloneTarget = Array.isArray(target) ? [] : {} // 考虑数组的情况
    for (key in target) {
      cloneTarget[key] = clone(target[key])
    }
    return cloneTarget
  } else {
    return target
  }
}

const target = {
  field1: 1,
  field2: undefined,
  field3: 'ConardLi',
  field4: {
      child: 'child',
      child2: {
          child2: 'child2'
      }
  },
  field5: [1, 2, 3, 4, 5]
};

console.log(clone(target))
// console.log(clone(target.target = target)) // 造成堆栈溢出